home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 1.0 for Developers / QuickTime 1.0 for Developers.iso / Programming Stuff / Interfaces / Oldstyle C Interfaces / Movies Format.h < prev    next >
C/C++ Source or Header  |  1991-09-06  |  13KB  |  544 lines

  1. /* MooV Format.h
  2.     Format of the MooV resource
  3.  
  4.     by Jim Batson, Bruce Leak, David Van Brink, Mark Krueger, Peter Hoddie, the vacationing Eric Hoffert
  5.     Copyright 1990 Apple Computer, Inc. All rights reserved.
  6. */
  7.  
  8. #ifndef _MoviesFormat_
  9. #define _MoviesFormat_
  10.  
  11.  
  12. #ifndef _Movies_
  13.     #include "Movies.h"
  14. #endif _MoviesPrivate_
  15.  
  16. #define kMovieVersion    (-1)                /* version number of the format here described */
  17.  
  18. #ifndef kSmallestArray
  19.     #define kSmallestArray    1
  20. #endif
  21.  
  22. /****************************************
  23. *
  24. *   General Types -
  25. *        These types are used in more than one of the
  26. *        directory types.
  27. *
  28. ****************************************/
  29.  
  30. /* MoviesUserData is the type used for user data in movie and track directories */
  31.  
  32. typedef struct {
  33.     long        size;                        /* size of this user data */
  34.     long        type;                        /* type of user data */
  35.     char         data[kSmallestArray];        /* the user data */
  36.     } MoviesUserData;
  37.  
  38. typedef struct {
  39.     long             size;
  40.     long            type;                    /* = 'udat' */
  41.     MoviesUserData    userData[kSmallestArray];
  42.     } UserDataAtom;
  43.  
  44. /* MoviesDataDescription tells us where the data for the movie or track lives.
  45.    The data can follow the directory, be in the datafork of the same file as the directory resource,
  46.    be in the resource fork of the same file as the directory resource, be in another file in the 
  47.    data fork or resource fork, or require a specific bottleneck to fetch the data. */
  48.  
  49.  
  50. /****************************************
  51. *
  52. *   MediaDirectory information -
  53. *        The MediaDirectory is tightly coupled to the data.
  54. *
  55. ****************************************/
  56.  
  57. /* The SampleDescriptionTable holds the SampleDescriptions needed to decompress chunks given the
  58.    SampleDescriptionID. There is a table per Media. */
  59.  
  60. /*
  61. typedef struct {
  62.     long        size;
  63.     long        type;
  64.     long        resvd1;
  65.     short        resvdA;
  66.     short        dataRefBlobId;
  67.     } SampleDescription, **SampleDescriptionHandle;
  68. */
  69.  
  70. typedef struct {
  71.     long        size;
  72.     long        type;                            /* = 'stsd' */
  73.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  74.     long        numEntries;
  75.     SampleDescription    sampleDescTable[kSmallestArray];
  76.     } SampleDescriptionAtom;
  77.  
  78. /* TimeToSampleNum maps physical sample time to physical sample number. */
  79. typedef struct {
  80.     long        sampleCount;
  81.     TimeValue    sampleDuration;
  82.     } TimeToSampleNum;
  83.     
  84. typedef struct {
  85.     long        size;
  86.     long        type;                            /* = 'stgs' */
  87.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  88.     long        numEntries;
  89.     TimeToSampleNum    timeToSampleNumTable[kSmallestArray];
  90.     } TimeToSampleNumAtom;
  91.  
  92.     
  93.  
  94. /* SyncSamples is a list of the physical samples which are self contained. */
  95.  
  96. typedef struct {
  97.     long        size;
  98.     long        type;                                /* = 'stss' */
  99.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  100.     long        numEntries;
  101.     long        syncSampleTable[kSmallestArray];
  102.     } SyncSampleAtom;
  103.  
  104. /* SampleToChunk maps physical sample number to chunk number.
  105.  */
  106.  
  107. typedef struct {
  108.     long        firstSample;
  109.     long        firstChunk;
  110.     long        samplesPerChunk;
  111.     long        sampleDescriptionID;
  112.     } SampleToChunk;
  113.         
  114. typedef struct {                /* same as SampleToChunk, but redundant first sample is removed */
  115.     long        firstChunk;
  116.     long        samplesPerChunk;
  117.     long        sampleDescriptionID;
  118.     } SampleToChunkAlternate1;
  119.  
  120. typedef enum {
  121.     sampleToChunkAlternate1 = 1<<0
  122.     } SampleToChunkFlags;
  123.     
  124. typedef struct {
  125.     long        size;
  126.     long        type;                                /* = 'stsc' */
  127.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  128.     long        numEntries;
  129.     SampleToChunk    sampleToChunkTable[kSmallestArray];
  130.     } SampleToChunkAtom;
  131.  
  132. typedef struct {
  133.     long        size;
  134.     long        type;                                /* = 'stco' */
  135.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  136.     long        numEntries;
  137.     long        chunkOffsetTable[kSmallestArray];
  138.     } ChunkOffsetAtom;
  139.  
  140. typedef struct {
  141.     long        size;
  142.     long        type;                                /* = 'stsz' */
  143.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  144.     long        sampleSize;
  145.     long        numEntries;
  146.     long        sampleSizeTable[kSmallestArray];
  147.     } SampleSizeAtom;
  148.  
  149.  
  150. typedef struct {
  151.     long        size;
  152.     long        type;            /* = 'stbl' */
  153.  
  154.     SampleDescriptionAtom    sampleDescription;
  155.     TimeToSampleNumAtom        timeToSampleNum;
  156.     SampleToChunkAtom        sampleToChunk;
  157.     SyncSampleAtom            syncSample;
  158.     SampleSizeAtom            sampleSize;
  159.     ChunkOffsetAtom            chunkOffset;
  160.     
  161.     } SampleTableAtom;
  162.     
  163.     
  164. typedef struct {
  165.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  166.     
  167.     long                componentType;                        /* mhdr or dhdr */
  168.     long                componentSubType;                    /* info to find media handler */
  169.     long                componentManufacturer;
  170.     long                componentFlags;
  171.     long                componentFlagsMask;
  172.     char                componentName[kSmallestArray];
  173.     
  174.     } PublicHandlerInfo;
  175.     
  176. typedef struct {
  177.     long                size;
  178.     long                type;                            /* = 'hdlr' */
  179.     
  180.     PublicHandlerInfo    hInfo;    
  181.     } HandlerAtom;
  182.     
  183.     
  184. typedef long DataRefAtom;                                /* a data reference is a private structure */
  185.  
  186. typedef struct {
  187.     long                size;
  188.     long                type;                            /* = 'dinf' */
  189.     
  190.     DataRefAtom            dataRef;
  191.     } DataInfoAtom;
  192.  
  193. typedef struct {
  194.     long        size;
  195.     long        type;
  196.     
  197.     long        flags;                                    /* 1 byte of version / 3 bytes of flags */
  198.     
  199.     short        rgnSize;
  200.     Rect        rgnBBox;
  201.     char        data[kSmallestArray];
  202.     } RgnAtom;
  203.  
  204. typedef struct {
  205.     long        size;
  206.     long        type;
  207.     
  208.     long        flags;                                    /* 1 byte of version / 3 bytes of flags */
  209.     
  210.     PixMap        mattePixMap;
  211.     ColorTable    matteColorTable;
  212.     } MatteAtom;
  213.  
  214. typedef struct {
  215.     long        size;
  216.     long        type;
  217.     
  218.     RgnAtom        aRgnClip;
  219.     } ClippingAtom;
  220.  
  221. /***********************
  222. * Media Info Example Structures 
  223. ***********************/    
  224.  
  225.     
  226. typedef struct {
  227.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  228.  
  229.     short                graphicsMode;                    /* for QD - transfer mode */
  230.     short                opColorRed;                        /* opcolor for transfer mode */
  231.     short                opColorGreen;
  232.     short                opColorBlue;
  233.     
  234.     } VideoMediaInfoHeader;
  235.  
  236.  
  237. typedef struct {
  238.     long                size;                            /* size of Media info */
  239.     long                type;                            /* = 'vmhd' */
  240.  
  241.     VideoMediaInfoHeader    vmiHeader;
  242.  
  243.     } VideoMediaInfoHeaderAtom;
  244.  
  245.  
  246.  
  247. typedef struct {
  248.     long                size;                            /* size of Media info */
  249.     long                type;                            /* = 'minf' */
  250.     
  251.     VideoMediaInfoHeaderAtom    header;
  252.     
  253.     HandlerAtom            dataHandler;
  254.     
  255.     DataInfoAtom        dataInfo;
  256.     
  257.     SampleTableAtom        sampleTable;
  258.     } VideoMediaInfo;
  259.  
  260.         
  261. typedef struct {
  262.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  263.  
  264.      short                balance;                
  265.     short                rsrvd;
  266.     
  267.     } SoundMediaInfoHeader;
  268.  
  269. typedef struct {
  270.     long                size;                            /* size of Media info */
  271.     long                type;                            /* = 'vmhd' */
  272.     
  273.     SoundMediaInfoHeader    smiHeader;    
  274.     } SoundMediaInfoHeaderAtom;
  275.  
  276. typedef struct {
  277.     long                size;                            /* size of Media info */
  278.     long                type;                            /* = 'minf' */
  279.     
  280.     SoundMediaInfoHeaderAtom    header;
  281.     
  282.     HandlerAtom            dataHandler;
  283.     
  284.     DataRefAtom            dataReference;
  285.     
  286.     SampleTableAtom        sampleTable;
  287.     } SoundMediaInfo;
  288.  
  289. typedef struct {
  290.     long            size;
  291.     long            type;
  292.     
  293.     /* whatever data the media handler needs goes here */
  294.     } MediaInfo;
  295.     
  296.  
  297. /***********************
  298. * Media Directory Structures 
  299. ***********************/    
  300.  
  301. typedef struct {
  302.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  303.     
  304.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  305.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  306.  
  307.     TimeValue            timeScale;                        /* start time for Media (Media time) */
  308.     TimeValue            duration;                        /* length of Media (Media time) */
  309.  
  310.     short                language;
  311.     short                quality;
  312.     } MediaHeader;
  313.     
  314. typedef struct {
  315.     long         size;
  316.     long        type;            
  317.     
  318.     MediaHeader    header;
  319.     } MediaHeaderAtom;
  320.     
  321. typedef struct {
  322.     long                size;
  323.     long                type;                            /* = 'mdia' */
  324.     
  325.     MediaHeaderAtom            mediaHeader;                /* standard Media information */
  326.  
  327.     HandlerAtom            mediaHandler;
  328.  
  329.     MediaInfo            mediaInfo;
  330. } MediaDirectory;
  331.  
  332.  
  333.  
  334. /***********************
  335. * Track Structures 
  336. ***********************/    
  337.     
  338. enum {
  339.     TrackEnable = 1<<0,
  340.     TrackInMovie = 1<<1,
  341.     TrackInPreview = 1<<2,
  342.     TrackInPoster = 1<<3
  343.     };
  344.     
  345. typedef struct {
  346.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  347.  
  348.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  349.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  350.  
  351.     long                trackID;
  352.  
  353.     TimeValue            formerTrackTimeScale;            /* start time for track (track time) */
  354.     TimeValue            duration;                        /* length of track (track time) */
  355.     TimeValue            movieTimeOffset;                /* this offset is in movie time */        
  356.  
  357.     PriorityType        priority;
  358.     short                layer;
  359.     short                alternateGroup;
  360.  
  361.     short                volume;
  362.     short                reserved1;
  363.  
  364.     MatrixRecord        matrix;
  365.     Fixed                trackWidth;
  366.     Fixed                trackHeight;
  367.         
  368. } TrackHeader;
  369.     
  370. typedef struct {
  371.     long                size;                            /* size of track header */
  372.     long                type;                            /* = 'tkhd' */
  373.         
  374.     TrackHeader        header;
  375.     } TrackHeaderAtom;
  376.  
  377. typedef struct {
  378.     TimeValue        trackDuration;
  379.     TimeValue        mediaTime;
  380.     Fixed            mediaRate;
  381.     } EditListType;
  382.     
  383. typedef struct {
  384.     long                size;
  385.     long                type;                            /* = elst */
  386.     
  387.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  388.  
  389.     long                numEntries;
  390.     EditListType        editListTable[kSmallestArray];
  391.     } EditListAtom;
  392.  
  393.  
  394. typedef struct {
  395.     long            size;
  396.     long            type;                                /* = edts */
  397.     
  398.     EditListAtom    editList;
  399.     } EditsAtom;
  400.  
  401.  
  402.     
  403. typedef struct {
  404.     long                size;
  405.     long                type;                            /* = 'trak' */
  406.  
  407.     TrackHeaderAtom            trackHeader;                /* standard track information */
  408.  
  409.     ClippingAtom        trackClip;
  410.  
  411.     EditsAtom            edits;
  412.     
  413.     MediaDirectory        media;
  414.     
  415.      UserDataAtom        userData;                        /* space for extending with new data types */
  416. } TrackDirectory;
  417.  
  418.  
  419. /****************************************
  420. *
  421. *   MovieDirectory -
  422. *        The MovieDirectory is the top level structure which 
  423. *        holds the TrackInstance describing where the
  424. *        TrackDirectories are.
  425. *
  426. ****************************************/
  427.  
  428. typedef struct MovieHeader{
  429.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  430.  
  431.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  432.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  433.  
  434.     /* Time specifications */
  435.     TimeValue            timeScale;
  436.     TimeValue            duration;
  437.     Fixed                preferredRate;                    /* rate at which to play this movie */
  438.  
  439.     short                preferredVolume;                /* volume to play movie at */
  440.     short                reserved1;            
  441.  
  442.     /* Graphics specifications */
  443.     long                preferredLong1;                    
  444.     long                preferredLong2;                    
  445.  
  446. /* option is to have a preferred matrix here */
  447.     MatrixRecord        matrix;
  448.  
  449.     TimeValue            previewTime;                    /* time in track the proxy begins (track time) */
  450.     TimeValue            previewDuration;                /* how long the proxy lasts (track time) */
  451.  
  452.     TimeValue            posterTime;                        /* time in track the proxy begins (track time) */
  453.  
  454.     TimeValue            selectionTime;                    /* time in track the proxy begins (track time) */
  455.     TimeValue            selectionDuration;                /* time in track the proxy begins (track time) */
  456.     TimeValue            currentTime;                    /* time in track the proxy begins (track time) */
  457.  
  458.     long                 nextTrackID;                    /* next value to use for a TrackID */
  459.  
  460.     } MovieHeader;
  461.  
  462. typedef struct {
  463.     long                size;
  464.     long                type;                            /* = 'mvhd' */
  465.  
  466.     MovieHeader     header;
  467.     } MovieHeaderAtom;
  468.     
  469. typedef struct MovieDirectory{
  470.     long                size;
  471.     long                type;                            /* = 'moov' */
  472.     
  473.     MovieHeaderAtom        header;
  474.     
  475.     ClippingAtom        movieClip;                
  476.     
  477.     /* Track Directories */
  478.     struct {
  479.         TrackDirectory  trackDirectory;                 /* Track directory information */    
  480.         }                 track[kSmallestArray];
  481.          
  482.      /* User data for Movie */
  483.      UserDataAtom        userData;                        /* space for user extensions */
  484.      
  485.     } MovieDirectory;
  486.  
  487.  
  488. /****************************************
  489. ****************************************/
  490.  
  491.  
  492. /* Movie formats and tags */
  493.     /* some system defined format IDs */
  494.     #define    MOVIE_TYPE        'moov'
  495.     #define TRACK_TYPE        'trak'
  496.     #define MEDIA_TYPE        'mdia'
  497.     #define VIDEO_TYPE        'vide'
  498.     #define SOUND_TYPE        'soun'
  499.     #define MIDI_TYPE        'midi'
  500.  
  501.     #define EMPTY_TAG        0x00
  502.  
  503.     #define    TEXT_TYPE                'text'
  504.     /* An example of some common name sub-types. */
  505.     #define    COPYRIGHT_TEXT            'cprt'
  506.     #define    SOURCE_NAME_CUSTOM        'snam'
  507.  
  508.  
  509. /* atom id's */
  510.     #define MovieAID                'moov'
  511.     #define MovieHeaderAID            'mvhd'
  512.     #define ClipAID                    'clip'
  513.     #define RgnClipAID                'crgn'
  514.     #define MatteClipAID            'cmat'
  515.     #define MatteImageDescAID         'mtid'
  516.     #define MatteDataAID            'mtda'
  517.     #define TrackAID                'trak'
  518.     #define    UserDataAID                'udta'
  519.     #define    TrackHeaderAID            'tkhd'
  520.     #define EditsAID                'edts'
  521.     #define EditListAID                'elst'
  522.     #define MediaAID                'mdia'
  523.     #define MediaHeaderAID            'mdhd'
  524.     #define    MediaInfoAID            'minf'
  525.     #define MediaInfoHeaderAID        'mihd'
  526.     #define VideoMediaInfoHeaderAID    'vmhd'
  527.     #define SoundMediaInfoHeaderAID    'smhd'
  528.     #define DataInfoAID                'dinf'
  529.     #define DataRefAID                'dref'
  530.     #define SampleTableAID            'stbl'
  531.     #define STSampleDescAID            'stsd'
  532.     #define STGroupToSampAID        'stgs'
  533.     #define STSyncSampleAID            'stss'
  534.     #define STSampleToChunkAID        'stsc'
  535.     #define HandlerAID                'hdlr'
  536.     #define STSampleSizeAID            'stsz'
  537.     #define STChunkOffsetAID        'stco'
  538.  
  539.     #define DataRefBlobAID 'blob'
  540.     #define DataRefContainerAID 'drfc'
  541.     
  542.  
  543. #endif _MoviesFormat_
  544.